import { INVALID_STRING_VALUE, INVALID_VALUE } from './../../Core/CoreDefine';

/**渠道 */
export enum Channel {
    /**默认 浏览器*/
    DEFAULT = 0,
    /**微信 */
    WECHAT = 1,
    /**头条 抖音 */
    TT = 2,
    /**快手 */
    KS = 3,
    /**oppo渠道 */
    OPPO = 4,
    /**vivo渠道 */
    VIVO = 5,
    /**魅族渠道 */
    MEIZU = 6,
    /**小米渠道 */
    XIAOMI = 7,
}

/**
 * 红点位置类型
 */
export enum RedpointPos {
    Main
}

/**
 * 红点枚举
 * 客户端红点从 300开始
 */

export enum RPointMask {
    /**客户端红点起始*/
    RPM_Client = 300,
    /**vip首次 */
    RPM_Vip_Frist,
    /**vip日常 */
    RPM_Vip_Daily,
    /**爵位 */
    RPM_Office,
    /**簽到*/
    RPM_Sign,
    /***/
    RPM_Tower,
    /**上阵 */
    RPM_Go_To_Battle,
    /**英雄解锁 */
    RPM_Hero_UnLock,
    /**升级*/
    RPM_Hero_LvUp,
    /**突破 */
    RPM_Hero_Tupo,
    /**升星 */
    RPM_Hero_AddStar,
    /**装备 */
    RPM_Have_Base,
    /** */
    RPM_Have_Sync,

    RPM_Have_LvUp,

    RPM_Box_Baiyin,

    RPM_Box_Huangjin,

    RPM_Box_Zhuanshu
}

export enum GRID_TYPE {
    //虚空
    VOID = 0,
    //道路
    ROAD = 1,
    //出生点
    PLAYSTART,
    //地表AC
    SURFACE,
    //放置点
    PLACE,
    //我放军营
    BARRACKS
}

/**英雄品质颜色 */
export enum HERO_TRAIT {
    DEFAULT,
    WHITE,
    GREEN,
    BLUE,
    PURPLE,
    YELLOW,
    RED,
}

export enum CURRENCY {
    /**玉石 */
    YUSHI = 100,
    /**金币 */
    GOLD = 101,
    /**战勋 */
    FEATS = 102,
    /**粮草 */
    WHEAT = 103,
}

export enum SPECIALWINDOW {
    /**英雄碎片 */
    HEROCHIP = 77777,
    /**帮助 */
    HELP = 88888,
    /**视频 */
    VIDEO = 99999
}

/**英雄详情按钮 */
export enum DETAILSBTN {
    /**可以使用 */
    DETAILSBTN0,
    /**合成不可使用 */
    DETAILSBTN1,
    /**按钮隐藏 */
    DETAILSBTN2,
}




export enum PART_PROPTS {
    /**攻击 */
    GongJi,
    /**防御 */
    FangYu,
    /**血量 */
    XueLiang,
    /**暴击 */
    BaoJi,
    /**闪避 */
    ShanBi,
    /**暴击伤害 */
    BaoShang,
    /**冰攻击*/
    BingGong,
    /**火攻 */
    HuoGong,
    /**冰抗 */
    BingKang,
    /**火抗 */
    HuoKang,
    /** 公式最大血量限制 */
    FormulaMaxHp = 24,
}
/** 装备部件枚举 */
export enum EQUIP_PART {
    /** 衣服 */
    CLOTHING = 0,
    /** 武器 */
    WUQI,
    /** 头冠 */
    HEAD,
    /** 兵书 */
    BINGSHU1,
    /** 兵书 */
    BINGSHU2,
    /** 兵书 */
    BINGSHU3,
}



export enum SELLSTORE {
    /**免费 */
    FREE,
    /**金币 */
    COIN,
    /**钻石 */
    DIAMONDS,
    /**视频 */
    VIDEO,

}

export enum OFFICERITEM {
    /**未解锁 */
    NOT,
    /**解锁 */
    LOCK,
    /**领取 */
    RECEICE
}

export enum VIPRECEIVE {
    /**礼包未解锁 */
    No,
    /**首次礼包待领取 */
    FIRSTNORECEIVE,
    /**每日礼包待领取 */
    DATNORECEIVE,
    /**首次礼包已领取 */
    FIRSTRECEIVE,
    /**每日礼包当日已领取 */
    DAYRECEIVE,
}

export enum VIPBOXTYPE {
    /**每日礼包 */
    DAYBOX,
    /**首次礼包 */
    FIRSTBOX,
}

/**宝箱预览类型 */
export enum BOXPREVIEW {
    /**每日礼包 */
    DAYBOX,
    /**首次礼包 */
    FIRSTBOX,
    /**章节宝箱 */
    LEVELBOX,
    /**官爵普通宝箱 */
    OFFICEBOX,
}



export enum STOREBTNTYPE {
    /**普通宝箱按钮L */
    boxL,
    /**普通宝箱按钮R */
    boxR,
    /**银宝箱按钮L */
    silverBoxL,
    /**银宝箱按钮R */
    silverBoxR,
    /**金宝箱按钮L */
    goldBoxL,
    /**金宝箱按钮R */
    goldBoxR,
}
export enum STOREBUYTYPE {
    COIN,
    YUSHI,
    VIDEO,
}

export enum SQUAD_BUTTON {
    /**全 */
    ALL,
    /**兵 */
    SOLDIER,
    /**车 */
    VEHICLE,
    /**马 */
    HORSE,
    /**炮 */
    CANNON,
    /**相 */
    MUTUALLY,
    /**士 */
    SCHOLAR,
}

/**图标解析 */
export enum PART_ITEM {
    /**id */
    ID,
    /**类型 */
    TYPE,
    /**数量 */
    NUM
}

/**展示类型 */
export enum ITEM_TYPE {
    /**英雄 */
    HERO,
    /**装备 */
    EQUIPDATA,
    /**道具 */
    PROP,
    /**货币 */
    CURRENCY
}

export enum LISTENTTYPE {
    /**卡牌触摸 */
    listent1,
    /**点击跳转英雄详情页 */
    listent2,
    /**点击跳转加持界面 */
    listent3,
}

export enum RANGE {
    RANGE1,
    RANGE2,
    RANGE3,
}

export enum STAR {
    /**无 */
    DEFAULT,
    /**黄色星星 */
    star0,
    /**月亮 */
    star1,
    /**太阳 */
    star2,
    /**皇冠 */
    star3,
}
/**突破丹类型 */
export enum PILL {
    /**白色突破丹 */
    PILL0 = 201,
    /**绿色突破丹 */
    PILL1 = 202,
    /**蓝色突破丹 */
    PILL2 = 203,
    /**紫色突破丹 */
    PILL3 = 204,
    /**黄色突破丹 */
    PILL4 = 205,
    /**红色突破丹 */
    PILL5 = 206
}


export enum HEROCHIPINFO {
    HEROID,
    HEROCHIPNUM
}


/**图标旗帜 */
export const ITEM_DETAIL_FLAG = {
    /** 背包环境 */
    BAG: 1 << 0,
    /** 展示 */
    TPL: 1 << 1,
    /** 购买环境 */
    BUY: 1 << 2,
    /** 无操作（无响应，但是禁止穿透） */
    NOT_OP: 1 << 3,
    /** 禁用触摸事件(允许点击穿透) */
    NOT_TOUCH: 1 << 4,
    /** 文本位置下方正中间 */
    NUMPOS_ITEM_BC: 1 << 5,
    /** 不现实数量 */
    NO_NUM: 1 << 6,
    /** 被选中 */
    SELECT: 1 << 7,
    /** 不现实背景图 */
    NO_BG: 1 << 8,
    /** 图标缩小一半 */
    ICON_SCALE: 1 << 9,
    /** 材料类型，不显示自己拥有数量，只显示需要数量 */
    MATERIAL_NO_HAVE: 1 << 10,
    /**不显示数量操作 */
    NO_NUM_NODE: 1 << 11,
    /** 材料 */
    MATERIAL: 1 << 12,
    /** 数字反向缩放 */
    NUM_SCALE: 1 << 13,
    /** 消耗显示样式-左右显示图标和icon */
    MATERIAL_STYLE_LINE: 1 << 12 | 1 << 8 | 1 << 9,
    /**允许触摸事件 不现实数量*/
    TOUCH: 1 << 14,
    /**合成强化 */
    BLESS: 1 << 15,
    /**既无背景又有底部强化值 */
    NO_BG_SHOWSLV: 1 << 16,
    /**商店放大图标 */
    SCALEICON: 1 << 17,
    /**合成放大图标 */
    SCALEBLESSICON: 1 << 18,
    /**空图标 */
    NULLICON: 1 << 19,
    /**显示特效 */
    SHOWLIGHT: 1 << 20,
    /**无强化等级 */
    NO_SLV: 1 << 21,
    /**恭喜获得光效 */
    LIGHT: 1 << 22,
    /**合成字体变化 */
    FONTHECHENG: 1 << 23,
    /**升级字体变化 */
    LVFONTCHANGE: 1 << 24,
    /**宝库静态英雄碎片 */
    STOREHERO: 1 << 25,
    /**隐藏宝库静态英雄碎片 */
    STORECHIPHIDE: 1 << 26,
}

export enum GOODSTYPE {
    CHIP = 1,
    PILL = 2,
}

/**地块信息类型 */
export enum INFO_TYPE {
    GRID,
}

/**地块数据 */
export enum GRID_INFO {
    ID = 0,
    POSITION,
    INFO,
    ZINDEX,
    MATERIAL
}

/**材料 */
export enum MATERIAL_INFO {
    TYPE,
    POSITION,
    SCALE,
    ZINDEX
}

/** */
export enum MapLayer {
    /**地表 */
    MLBase,
    /** 地块 */
    MLGrid,
    /**素材层 */
    MLMaterial,
    /** 触摸层 */
    MLTouch,

    /** 效果层1 用于显示选中*/
    MLEffect_1,
    /**效果层2 用于显示攻击范围*/
    MLEffect_2,
    /** 地块逻辑UI层 */
    MElementUI,
    /** 开发的时候测试层 */
    TestLayer,
}

/** 装备部件 */
export enum PART_EQUIP {
    /** 实例ID - 须与ITEM.ITEM_ATT._.INS_ID 相等 */
    INS_ID = 0,
    /** 装备表ID */
    TPLT_ID = 1,
    /**等级 */
    SLV = 2,
    /**品质 */
    QUALITY = 3,
    //是否首次穿戴获得经验
    ISFIRSTEXP = 4,

    WEAR = 5

}


/** 加载类型枚举 */
export enum LoadingType {
    AppStart,
    PloatScene,
    GameScene,
    InitRole,
    BattleScene,
    Simulator,
}

/**排序 */
export enum CompareEnum {
    CEQual = 0,
    CGreater = -1,
    CLess = 1,
}


/**合成强化拖拽父节点位置 */
export enum BLESS {
    /**合成槽1 */
    BLESS0,
    /**合成槽2 */
    BLESS1,
    /**强化槽3 */
    BLESS2,
    /**装备栏 */
    BLESS3,
    /**回收 */
    BLESS4,
}

/**合成强化结果 */
export enum BLESSEND_INFO {
    /**强化成功 */
    strSus,
    /**强化失败 */
    strFail,
    /**合成成功 */
    synthesis,

}


/** 弹窗提示类型 */
export enum ToastType {
    Null,
    /** 游戏提示 */
    WarnTip,
    End,
}

/**战斗场景 */
export enum PART_BTL_SCENE {
    /** 过关 */
    GUANQIA = 0,
    /**竞技场 */
    ARENA
}

/** 引导ID */
export enum GuidEnum {
    IDD_000 = 0,
    // 新手入场引导。
    IDD_100 = 100,
    // 新手特殊引导，第一关结束的时候。
    IDD_101 = 101,
    // 新手引导，第二关挑战结束。
    IDD_102 = 102,

    /** 未解锁1-10，无其他引导*/
    WAIT_FIGHT = 1100,
}

/**象棋钮钮索引 */
export const CHESS = {
    /**兵 */
    SOLDIER: '兵',
    /**车 */
    VEHICLE: '车',
    /**马 */
    HORSE: '马',
    /**炮 */
    CANNON: '炮',
    /**相 */
    MUTUALLY: '相',
    /**士 */
    SCHOLAR: '士',
}

export enum FRONT {
    /**上阵 */
    battle,
    /**下阵 */
    Lower,
}

export enum REWARD {
    DEFAULT,
    ALL,
    HERO,
}


/**红点 */
export const PointInfo = {
    vip_btn: "观看激励视频-解锁VIP",
    vip_frist: "VIP首次礼包",
    vip_daily: "Vip 每日礼包",
    bless_ad: "广告强化",
    bless_gold: "金币强化",
    officer_ad: "观看激励视频-官职额外奖励",
    officer_norl: "官爵普通宝箱",
    sign_norl: "普通签到奖励",
    sign_ad: '观看激励视频-双倍签到',
    store_buy_free: "免费购买装备",
    store_buy_coin: "金币购买装备",
    store_buy_diamond: "玉石购买装备",
    store_buy_video: "观看激励视频-领取装备",
    store_open_ybox_coin: "金币开启银宝箱",
    store_open_ybox_video: "视频开启银宝箱",
    store_open_ybox_diamod: "玉石开启银宝箱",
    store_open_jbox_coin: "金币开启金宝箱",
    store_open_jbox_video: "观看激励视频-领取黄金宝箱",
    store_open_jbox_diamod: "玉石开启金宝箱",
    store_open_zbox_coin: "观看激励视频-领取专属宝箱",
    store_open_zbox_video: "视频开启专属宝箱",
    store_open_zbox_diamod: "玉石开启专属宝箱",
    store_open_ybox: "装备宝库-抽金币玉石宝箱次数",
    store_open_jbox: "装备宝库-抽突破丹宝箱次数",
    store_open_zbox: "装备宝库-抽英雄碎片宝箱次数",
    common_ad_coin: "观看激励视频-金币不足",
    common_ad_yushi: "观看激励视频-玉石不足",
    common_ad_chip: "观看激励视频-碎片不足",
    common_ad_pill: "观看激励视频-金丹不足",
    common_ad_wheat: "观看激励视频-粮草增益",
    tower: "重楼强征",
    rewardCtrl_ad: "观看激励视频-恭喜获得领取",
    FeatureCtrl_ad: "观看激励视频-双倍领取碎片",
    resultDouble: "观看视频领取双倍结算奖励",
    recruit_ad: "观看激励视频-抽卡招募10次",
    recruit_click: "抽卡招募1次",
    rcruit_enter: "进入抽卡界面",
}


/** 线性状态 */
export enum LinearState {
    /** 已通过，未领取 */
    Reward,
    /** 已通过 */
    Pass,
    /** 当前 */
    Now,
    /** 未出现 */
    Future,
}
//攻击，防御，生命，暴击，闪避，爆伤，冰属性攻击，火属性攻击，冰属性抗性，火属性抗性
export const showProptsInfo = {
    attack: '攻击',
    defense: '防御',
    life: '生命',
    hit: '暴击',
    Dodge: '闪避',
    burst: '爆伤',
    ice: '冰属性攻击',
    fire: '火属性攻击',
    iceResist: '冰属性抗性',
    fireResist: '火属性抗性'
}


export const getHeroLoad = {
    /**默认解锁获取 */
    unlock: '默认解锁获取',
    /**签到奖励获取 */
    sign: '签到奖励获取',
    /**官爵奖励获取 */
    guanJue: '官爵奖励获取',
    /**vip获取 */
    vip: 'vip获取',
    /**竞技场获取 */
    arena: '竞技场获取',
    /**战斗奖励获取 */
    battle: 'battle',
    /**章节宝箱获取 */
    chapter: '章节宝箱获取',
    /**宝库宝箱奖励获取 */
    treasury: '宝库宝箱奖励获取'
}

/**
 * 红点动效类型
 */
export enum RedpointEffect {
    /**闪烁 */
    BLING,
    /**特效 */
    RUNNING,
    /**感叹号红点 */
    REDPOINT,
}


/**buff增益效果 */
export enum BUFFINFO {
    /**战场加速、百分比 */
    battlefieldAcceleration,
    /**战场初始资源 */
    InitBattlefieldRes,
    /**合成消耗资源、百分比 */
    syntheticConsumptionRes,
    /**强化消耗资源、百分比 */
    strengthenResConsumption,
    /**竞技场免费强征次数 */
    TowerFreeImpressNum,
    /**宝库每日免费购买次数(具体数量） */
    storeDayFreeBuyNum,
}

/**英雄增益 */
export enum HEROBUFF {
    id,
    index,
    num,
}

/**奖励数据 */
export enum PART_GOODS {
    id,
    type,
    num,
}


/**章节地图宝箱 */
export enum CHAPTERBOX {
    /**章节未解锁 */
    unChapterLock,
    /**章节解锁 */
    chapterLock,
    /**宝箱未解锁 */
    unLock,
    /**宝箱解锁 */
    lock,
    /**宝箱已领取 */
    receive
}


export enum SUIT {
    SUIT0,
    SUIT1,
    SUIT2,
    SUIT3,
    SUIT4,
    SUIT5,
}

/** 1兑换码， 2修改昵称 3银币兑换, 4规则说明, 5邮件详情 6武将详情, 7.排行奖励*/
export enum ComonTip {
    comon,
    code,
    name,
    yinbi,
    ruleBtn,
    email,
    shuxing,
    rankReard,
}

export const CHECK_TIME = {
    TIME_CLOCK_CHECK: 10, // (s)
}
/**图集中图片名的前缀 */
export const TEXTURE_PREFIX = {
    type: 'tyqe_',
    quality: 'quality',
    head: "head_",
    item: "item_",
    equip: "equip_",
    hero: "hero_",
    name: "name_",
    skill: "skill_",
    suit: "suit_",
    buff: "buff_",
    grade: "grade_",
    notice: "notice_",
}
/** 消息字段名*/

//#region 
export const CMsg = {
    client: {
        bag: {
            onBagItemChange: "CMsg.clint.bag.onGetOrUseItem",
            onCurrencyChange: 'CMsg.client.bag.onCurrencyChange',
        },
        equip: {
            AddSynthesisEquip: "CMsg.clint.equip.adAddSynthesisEquip",
            onEquipPutOff: "CMsg.clint.equip.onEquipPutOff",
            onEquipPutOn: "CMsg.clint.equip.onEquipPutOn",
            onAddEquipSlv: "CMsg.clint.equip.onAddEquipSlv",
            onAddEquipQuality: "CMsg.clint.equip.onAddEquipQuality",
            /**回收装备 */
            ondelEquip: 'CMsg.client.equip.ondelEquip',
            onBlessEquip: 'CMsg.client.equip.onBlessEquip'
        },
        office: {
            onGetAdReward: "CMsg.client,office.onGetAdReward",
            onGetReward: "CMsg.client,office.onGetReward",
        },
        game: {

        },

        view: {
            onViewChange: 'CMsg.client,view.onViewChange'
        },
        guide: {

        },
        tower: {
            onStartFight: "CMsg.client.tower.onStartFight",
            onAddTowerReward: "CMsg.client.tower.onAddTowerReward",
        },
        home: {
            onSign: 'CMsg.client.home.onSign',
            GOTO_NEW_DAY: 'CMsg.client.home.GOTO_NEW_DAY',
            onVipLvUp: "CMsg.client.home.onVipLvUp",
            onCoinAnim: "CMsg.client.home.onCoinAnim",
            onBattleItem: "CMsg.client.home.onBattleItem",
            onMovePos: "CMsg.client.home.onMovePos",
            onHeroItem: "CMsg.client.home.onHeroItem",
            onheroBattleItem: "CMsg.client.home.onheroBattleItem",
            onaddLevel: 'CMsg.client.home.onaddLevel',
            onFeature: "CMsg.client.home.onFeature",
            onChangeLevel: 'CMsg.client.home.onChangeLevel',
            onRecruit: "CMsg.client.home.onRecruit",
        },
        hero: {
            onGetHeroZhangLi: 'CMsg.client.hero.onGetHeroZhangLi',
            onSetSkill: "CMsg.client.hero.onSetSkill",
            onAddHero: "CMsg.client.hero,onAddHero",
            onHeroAddExp: "CMsg.client.hero.onHeroAddExp",
            onHeroLvUp: "CMsg.client.hero.onHeroLvUp",
            onHeroBreach: 'CMsg.client.hero.onHeroBreach',//英雄卡牌等级突破
            onAddSuit: "CMsg.client.hero.onAddSuit",
            onHeroAddStar: "CMsg.client.hero.onHeroAddStar"
        },
        sdk: {
            onShareScreenSuc: "CMsg.client.sdk.onShareScreenSuc",
        },
        fight_ui: {
            selectItem: "CMsg.client.fightUI.selectItem",
            hideAllItem: "CMsg.client.fightUI.hideAllItem",
            onWheatChange: "CMsg.client.fightUI.onWheatChange",
            CMD_CHANGE: "CMsg.client.fightUI.cmdChange",
            end_fight: "CMsg.client.fightUI.endFight",
            onRetreatClick: "CMsg.client.fightUI.onRetreatClick",
            onFinishSettle: "CMsg.client.fightUI.onFinishSettle"
        },

        test: {
            export: "GMsg.client.test.export"
        }
    },
    rPoint: { // 红点模块
        valueSetting: "CMsg.rPoint.valueSetting",
        viewSetting: "CMsg.rPoint.viewSetting",
    },
    data: {
        onClientGuideChange: "CMsg.data.onClientGuideChange",
        setGuide: "CMsg.data.setGuide",
        onGuideEvent: "CMsg.data.onGuideEvent",
    },
    unlock: {

    },
}
//#endregion

/** Key format */
export const KF = {

    genItemKey(id: number, type: number): string {
        return id + '_' + type
    },
    deItemKey(str: string): [number, number] {
        if (!str || str == INVALID_STRING_VALUE) return [INVALID_VALUE, INVALID_VALUE];
        let strs = str.split('_');
        return [parseInt(strs[0]), parseInt(strs[1])];
    },

    getLogKey(main: number, sub: number): number {
        return main * 10000 + sub;
    },
    deLogKey(key: number): [number, number] {
        return [Math.floor(key / 10000), key % 10000];
    },

    posDecode: function (str: string): cc.Vec2 {
        if (!str || str == INVALID_STRING_VALUE) return cc.Vec2.ZERO;
        let strs = str.split('_');
        if (strs.length != 2) {
            cc.error('army id format be error! ');
            return null;
        }
        return cc.v2(parseInt(strs[0]), parseInt(strs[1]));
    },

    posEncode: function (pos: cc.Vec2): string {
        return pos.x + '_' + pos.y;
    },


    spliteArrays<T>(src: T[], num: number): T[][] {
        let totalSize = src.length;
        let res = [];
        let item = [];
        for (let i = 0; i < totalSize; i++) {
            if (!item) item = [];
            item.push(src[i]);
            if (i == totalSize - 1) {
                res.push(item);
            }
            else if (item.length == num) {
                res.push(item);
                item = null;
            }
        }
        return res;
    },
}
